<template>
  <div class="login-page" v-if="hasSigned === true">
    <n-result status="info" title="登录" description="正在奋力登录中......"> </n-result>
  </div>
  <div class="privacy-agreement" v-else>
    <n-card embedded :bordered="false" class="agreement">
      <div>
        <h3 style="text-align: center">《用户隐私协议》</h3>
        <p>
          开放原子开源基金会（下文简称“我们”或“基金会”）深知您的隐私对您的重要性，并充分尊重您的隐私。在向我们提交您的个人信息之前，请您仔细阅读本《隐私政策声明》（以下简称“本声明”）。如果您对于我们处理您的个人信息的方式有任何疑问，欢迎与我们联系。
        </p>
        <p>
          1. 我们如何收集和处理您的个人信息 如果您仅仅浏览 openEuler
          社区网站（以下简称“本网站”）的一般性内容，我们通常并不要求您提供个人信息，但在以下情形，我们会相应收集您的个人信息：
          a.账号服务，您在注册账户或使用我们的服务时，向我们提供的相关个人信息，例如电话号码、电子邮件等。
          b.论坛服务，指您开启设备定位功能并使用我们基于位置提供的相关服务时，收集的有关您位置的信息，包括：
          您通过具有定位功能的移动设备使用我们的服务时，通过GPS或WiFi等方式收集的您的地理位置信息；
          您可以通过关闭定位功能，停止对您的地理位置信息的收集。
          日志信息，指您使用我们的服务时，系统可能通过cookies、标识符及相关技术收集的信息，包括您的设备信息、浏览信息、点击信息，并将该等信息储存为日志信息，为您提供个性化的用户体验、保障服务安全。您可以通过浏览器设置拒绝或管理cookie、标识符或相关技术的使用。
        </p>
        <p>
          2. 我们如何使用 Cookie 及类似技术 2.1 信息存储的方式和期限
          为确保网站正常运转，我们有时会在计算机或移动设备上存储
          Cookie。Cookie是访问网站时放置在您的计算机或移动设备上的小型数据文件。Cookie
          的内容只能由创建它的服务器检索或读取。Cookie服务于不同的目的，例如帮助我们了解网站如何被使用，让您高效地浏览页面，记住您的偏好并总体上改善您的浏览体验。
          一般情况下，我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。
          2.2 我们使用二种类型的Cookie 严格必要的Cookie:
          当您使用网站时，Cookie将确保您对该网站的访问尽可能顺利、安全;
          统计分析Cookie：我们收集关于您使用服务的信息，包括您的单次或多次访问，这些Cookie帮助我们了解服务是如何运行、使用的。我们使用百度提供的统计分析插件。
          2.3 产品或服务停止运营时的通知
          当我们的产品或服务发生停止运营的情况时，我们将以推送通知、公告等形式通知您，并在合理期限内删除您的个人信息或进行匿名化处理，法律法规另有规定的除外。
          2.4 信息存储的地域 我们会按照法律法规规定，将境内收集的用户个人信息存储于中国境内。
          目前我们不会跨境传输或存储您的个人信息。将来如需跨境传输或存储的，我们会向您告知信息出境的目的、接收方、安全保证措施和安全风险，并征得您的同意。
        </p>
        <p>
          3. 我们如何共享您的个人信息
          共享是指我们向第三方提供个人信息，且我们和第三方分别对个人信息进行独立处理的过程。除非您的同意，我们不会向第三方共享您的个人信息，但本声明规定的情形除外。
        </p>
        <p>
          4. 我们将保留多久您的个人信息 我们可能将在向您提供服务的过程之中所收集的信息用作下列用途：
          我们将会在达成本声明所述目的所需的期限内保留您的个人信息，除非按照法律要求或您的要求需要延长保留期。
          一般而言，我们会自您使用我们的社区服务时获取您的个人信息之日起，根据可适用法律的要求或服务协议的约定，在留存期限内存储或保留您的个人信息。在您的个人信息超出保留期限后，且没有法律要求我们继续处理您的特定个人信息的情况下，我们将会根据可适用法律的要求删除您的个人信息，或进行匿名化处理。
          例如为了服务优化，基于统计访问数量目的收集的 IP
          地址、访问时间戳、访问来源、访问页面、访问状态、访问资源大小、操作系统、系统语言、浏览器类型、浏览器语言、浏览器版本、访问社区所用服务器类型版本信息会保存
          10 天后自动删除。
          使我们更加了解您如何接入和使用我们的服务，从而针对性地回应您的个性化需求，例如语言设定、位置设定、个性化的帮助服务和指示，或对您和其他用户作出其他方面的回应；
          例如当社区不再将您作为社区城市用户组的成员展示，我们将在 1
          个月内删除之前为了展示您的成员身份而收集的您的个人数据（头像、姓名、邮箱、公司名称、职位、学校、个人简介）。
        </p>
        <p>
          5. 我们将如何保护您的个人信息
          我们重视您的个人信息安全。我们采用适当的物理、管理和技术保障措施来保护您的个人信息。例如，我们会使用加密技术确保信息的机密性；我们会使用保护机制防止信息遭到恶意攻击；我们会部署访问控制机制，确保只有授权人员才可访问个人信息；以及我们会举办安全和隐私保护培训等。
          总之，我们会尽力保护您的个人信息。尽管如此，任何措施都无法做到无懈可击，也没有任何产品与服务、网站、信息传输、计算机系统、网络连接是绝对安全的。
        </p>
        <p>
          6. 如何访问或控制您的个人信息 访问我们持有的您的个人信息并获得副本的权利;
          要求我们更新或更正您的个人信息的权利; 要求我们删除您的个人信息的权利；
          反对我们对您的个人信息进行处理的权利； 限制我们对您的个人信息进行处理的权利；
          向有权的个人信息保护部门提起投诉、举报的权利。
        </p>
        <p>
          7. 信息安全
          我们使用各种安全技术和程序，以防信息的丢失、不当使用、未经授权阅览或披露。例如，在某些服务中，我们将利用加密技术（例如SSL）来保护您提供的个人信息。但请您理解，由于技术的限制以及可能存在的各种恶意手段，在互联网行业，即便竭尽所能加强安全措施，也不可能始终保证信息百分之百的安全。您需要了解，您接入我们的服务所用的系统和通讯网络，有可能因我们可控范围外的因素而出现问题。
        </p>
        <p>
          8. 我们如何使用信息 我们可能将在向您提供服务的过程之中所收集的信息用作下列用途：
          向您提供服务；
          在我们提供服务时，用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途，确保我们向您提供的产品和服务的安全性；
          帮助我们设计新服务，改善我们现有服务；
          使我们更加了解您如何接入和使用我们的服务，从而针对性地回应您的个性化需求，例如语言设定、位置设定、个性化的帮助服务和指示，或对您和其他用户作出其他方面的回应；
          向您提供与您更加相关的广告以替代普遍投放的广告；
          评估我们服务中的广告和其他促销及推广活动的效果，并加以改善； 软件认证或管理软件升级；
          让您参与有关我们产品和服务的调查。
        </p>
        <p>
          9. 信息共享
          目前，我们不会主动共享或转让您的个人信息至第三方，如存在其他共享或转让您的个人信息或您需要我们将您的个人信息共享或转让至第三方情形时，我们会直接或确认第三方征得您对上述行为的明示同意。
          为了投放广告，评估、优化广告投放效果等目的，我们需要向广告主及其代理商等第三方合作伙伴共享您的部分数据，要求其严格遵守我们关于数据隐私保护的措施与要求，包括但不限于根据数据保护协议、承诺书及相关数据处理政策进行处理，避免识别出个人身份，保障隐私安全。
          我们不会向合作伙伴分享可用于识别您个人身份的信息（例如您的姓名或电子邮件地址），除非您明确授权。
          我们不会对外公开披露所收集的个人信息，如必须公开披露时，我们会向您告知此次公开披露的目的、披露信息的类型及可能涉及的敏感信息，并征得您的明示同意。
          随着我们业务的持续发展，我们有可能进行合并、收购、资产转让等交易，我们将告知您相关情形，按照法律法规及不低于本《隐私政策》所要求的标准继续保护或要求新的控制者继续保护您的个人信息。
          另外，根据相关法律法规及国家标准，以下情形中，我们可能会共享、转让、公开披露个人信息无需事先征得您的授权同意：
          与国家安全、国防安全直接相关的； 与公共安全、公共卫生、重大公共利益直接相关的；
          犯罪侦查、起诉、审判和判决执行等直接相关的；
          出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的；
          个人信息主体自行向社会公众公开个人信息的；
          从合法公开披露的信息中收集个人信息的，如合法的新闻报道、政府信息公开等渠道。
        </p>
        <p>
          10. 您的权利
          在您使用我们的服务期间，我们可能会视产品具体情况为您提供相应的操作设置，以便您可以查询、删除、更正或撤回您的相关个人信息，您可参考相应的具体指引进行操作。此外，我们还设置了投诉举报渠道，您的意见将会得到及时的处理。如果您无法通过上述途径和方式行使您的个人信息主体权利，您可以通过本《隐私政策》中提供的联系方式提出您的请求，我们会按照法律法规的规定予以反馈。
          当您决定不再使用我们的产品或服务时，可以申请注销账户。注销账户后，除法律法规另有规定外，我们将删除或匿名化处理您的个人信息。
        </p>
        <p>
          11. 变更
          我们可能适时修订本《隐私政策》的条款。当变更发生时，我们会在版本更新时向您提示新的《隐私政策》，并向您说明生效日期。请您仔细阅读变更后的《隐私政策》内容，若您继续使用我们的服务，即表示您同意我们按照更新后的《隐私政策》处理您的个人信息。
        </p>
        <p>
          12. 未成年人保护
          我们鼓励父母或监护人指导未满十八岁的未成年人使用我们的服务。我们建议未成年人鼓励他们的父母或监护人阅读本《隐私政策》，并建议未成年人在提交的个人信息之前寻求父母或监护人的同意和指导。
        </p>
        <div class="agreement-radio">
          <n-space>
            <n-radio
              :checked="checkedValue === 'disagree'"
              value="disagree"
              name="basic-demo"
              size="large"
              @change="handleChange"
            >
              不同意
            </n-radio>
            <n-radio
              :checked="checkedValue === 'agree'"
              value="agree"
              name="basic-demo"
              size="large"
              @change="handleChange"
            >
              同意
            </n-radio>
          </n-space>
        </div>
      </div>
    </n-card>
  </div>
</template>
<script setup>
import { useDialog } from 'naive-ui';
import router from '@/router/index';
import { storage } from '@/assets/utils/storageUtils';
import { addRoom } from '@/assets/utils/socketUtils';
import { urlArgs, resUrlArgs } from '@/assets/utils/urlUtils';
import { loginByCode } from '@/api/get';
import { signPrivacy } from '@/api/post';
import axios from '@/axios';
import store from '@/store';
const hasSigned = ref(true);
const resUrlSucess = ref(false);
const handleIsSuccess = () => {
  if (hasSigned.value) {
    if (urlArgs().isSuccess === 'True') {
      setTimeout(() => {
        router.push({ name: 'task' }).then(() => {
          addRoom(storage.getValue('token'));
        });
      }, 1000);
    } else if (urlArgs().isSuccess === 'False') {
      exitLogin();
    }
  } else if (!hasSigned.value) {
    if (resUrlArgs(resUrl.value).isSuccess === 'True') {
      resUrlSucess.value = true;
    } else if (urlArgs().isSuccess === 'False') {
      exitLogin();
    }
  }
};
const resUrl = ref(null);
// 进入登录页面
const gotoHome = () => {
  if (urlArgs().code) {
    loginByCode({
      code: urlArgs().code,
      org_id: storage.getValue('loginOrgId') || store.getters.getUnLoginOrgId?.id,
      privacy_version: 'v1.0',
    })
      .then((res) => {
        hasSigned.value = res.data?.is_privacy_sign;
        storage.setValue('token', res.data?.token);
        storage.setValue('user_id', res.data?.user_id);
        storage.setLocalValue('unLoginOrgId', {
          name: res.data?.current_org_name,
          id: res.data?.current_org_id,
        });
        if (res.data?.is_privacy_sign) {
          window.location = res.data?.url; // login?isSuccess=True
        } else {
          resUrl.value = res.data?.url;
          handleIsSuccess();
        }
      })
      .catch((err) => {
        window.$message?.error(err?.data?.error_msg || '登录失败！');
        exitLogin();
      });
  }
  handleIsSuccess();
};

const dialog = useDialog();
const checkedValue = ref(null);
const handleChange = (e) => {
  if (e.target.value === 'agree') {
    dialog.warning({
      title: '警告',
      content: '你确定同意用户隐私协议吗？点击确定将签署协议直接登录',
      positiveText: '确定',
      negativeText: '不确定',
      onPositiveClick: () => {
        checkedValue.value = e.target.value;
        signPrivacy({ privacy_version: 'v1.0', is_sign: true })
          .then(() => {
            if (resUrlSucess) {
              router.push({ name: 'task' }).then(() => {
                addRoom(storage.getValue('token'));
              });
            }
          })
          .catch((err) => {
            window.$message?.error(err?.data?.error_msg || '签署隐私协议失败！');
          });
      },
      onNegativeClick: () => {
        checkedValue.value = null;
      },
    });
  } else if (e.target.value === 'disagree') {
    dialog.warning({
      title: '警告',
      content: '你确定不同意用户隐私协议吗？点击确定将退出登录',
      positiveText: '确定',
      negativeText: '不确定',
      onPositiveClick: () => {
        checkedValue.value = e.target.value;
        // 退出登录
        exitLogin();
      },
      onNegativeClick: () => {
        checkedValue.value = null;
      },
    });
  }
};
const exitLogin = () => {
  axios
    .delete('/v1/logout')
    .then((res) => {
      window.sessionStorage.clear();
      if (res.error_msg) {
        window.location = res.error_msg;
      } else {
        router.replace({
          name: 'task',
        });
      }
    })
    .catch((err) => {
      window.$message?.error(err?.data?.error_msg || '退出登录失败！');
    });
};
onMounted(() => {
  gotoHome();
});
</script>
<style lang="less">
.login-page {
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
.privacy-agreement {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  .agreement {
    width: 60%;
    height: 100%;
    overflow-y: scroll;
    color: #3d526f;
    p {
      margin: 10px 0;
      text-indent: 30px;
      font-size: 16px;
    }
  }
  .agreement-radio {
    display: flex;
    justify-content: center;
    margin: 25px 0;
  }
}
</style>
